/*
 * @Author: linghailong
 * @Date: 2021-01-19 11:45:06
 * @LastEditors: linghailong
 * @LastEditTime: 2021-02-18 10:45:40
 * @FilePath: \vue-source\src\compiler\index.js
 */
import { parse } from "./parser/index";
import { optimize } from "./optimizer";
import { generate } from "./codegen/index";
import { createCompilerCreator } from "./create-compiler";

// `createCompilerCreator` allows creating compilers that use alternative
// parser/optimizer/codegen, e.g the SSR optimizing compiler.
// Here we just export a default compiler using the default parts.
export const createCompiler = createCompilerCreator(
  /* 在createCompiler中的compile函数中调用并且被compile返回*/ function baseCompile(
    template: string,
    options: CompilerOptions
  ): CompiledResult {
    /* 抽象语法树 */
    const ast = parse(template.trim(), options);
    if (options.optimize !== false) {
      optimize(ast, options);
    }
    const code = generate(ast, options);
    return {
      ast,
      render: code.render,
      staticRenderFns: code.staticRenderFns,
    };
  }
);
